package com.cykj.faceledtv.utils;

/**
 * @author jzh
 * @date 2018/11/05 18:11
 */

public class ToByteUtils {
    public static byte[] shortToByteArray(short data) {
        byte[] bytes = new byte[2];
        bytes[1] = (byte) (data & 0xff);
        bytes[0] = (byte) ((data & 0xff00) >> 8);
        return bytes;
    }

    public static byte[] charToByteArray2(char data) {
        byte[] bytes = new byte[2];
        bytes[1] = (byte) (data);
        bytes[0] = (byte) (data >> 8);
        return bytes;
    }

    public static byte[] charToByteArray1(char data) {
        byte[] bytes = new byte[1];
        bytes[0] = (byte) (data);
        return bytes;
    }

    public static byte[] intToByteArray4(int data) {
        byte[] bytes = new byte[4];
        bytes[3] = (byte) (data & 0xff);
        bytes[2] = (byte) ((data & 0xff00) >> 8);
        bytes[1] = (byte) ((data & 0xff0000) >> 16);
        bytes[0] = (byte) ((data & 0xff000000) >> 24);
        return bytes;
    }

    public static byte[] longToByteArray4(long data) {
        byte[] bytes = new byte[4];
        bytes[3] = (byte) (data & 0xff);
        bytes[2] = (byte) ((data & 0xff00) >> 8);
        bytes[1] = (byte) ((data & 0xff0000) >> 16);
        bytes[0] = (byte) ((data & 0xff000000) >> 24);
        return bytes;
    }

    public static byte[] intToByteArray1(int data) {
        byte[] bytes = new byte[1];
        bytes[0] = (byte) (data & 0xff);
        return bytes;
    }

    public static byte[] intToByteArray2(int data) {
        byte[] bytes = new byte[2];
        bytes[1] = (byte) (data & 0xff);
        bytes[0] = (byte) ((data & 0xff00) >> 8);
        return bytes;
    }

    public static byte[] intToByteArray3(int data) {
        byte[] bytes = new byte[3];
        bytes[2] = (byte) (data & 0xff);
        bytes[1] = (byte) ((data & 0xff00) >> 8);
        bytes[0] = (byte) ((data & 0xff0000) >> 16);
        return bytes;
    }

    public static char byteArrayToChar2(byte[] bytes) {
        return (char) ((0xff & bytes[1]) | (0xff00 & (bytes[0] << 8)));
    }

    public static char byteArrayToChar1(byte[] bytes) {
        return (char) (0xff00 & (bytes[0] << 8));
    }

    public static char byteArrayToChar1(byte bytes) {
        return (char) (0xff00 & (bytes << 8));
    }

    public static int byteToInt(byte bytes) {
        return (0xff & bytes);
    }

    public static int byteArrayToInt1(byte[] bytes) {
        return (0xff & bytes[0]);
    }

    public static int byteArrayToInt2(byte[] bytes) {
        return (0xff & bytes[1]) | (0xff00 & (bytes[0] << 8));
    }

    public static int byteArrayToInt3(byte[] bytes) {
        return (0xff & bytes[2]) | (0xff00 & (bytes[1] << 8)) | (0xff0000 & (bytes[0] << 16));
    }

    public static int byteArrayToInt4(byte[] bytes) {
        return (0xff & bytes[3]) | (0xff00 & (bytes[2] << 8)) | (0xff0000 & (bytes[1] << 16))
                | (0xff000000 & (bytes[0] << 24));
    }

    /**
     * 根据索引截取指定的byte数组
     */
    public static byte[] copyByte(byte[] data, int begin, int length) {
        if (length == 0) {
            return null;
        }
        byte[] newByte = new byte[length];
        System.arraycopy(data, begin, newByte, 0, length);
        return newByte;
    }
}
